
package gtd;

import java.sql.Date;
import java.util.List;

public class AccesoDatos implements Interfaz1{
    
    public void formateaFechas(Date fecha){
        fecha.setYear(fecha.getYear()-1900);
        fecha.setMonth(fecha.getMonth()-1);
    }
    
    @Override
    public boolean anhadirTarea(String nombre, int idProyecto, Date fechaInicio, Date fechaFin){
       
        // Comprobaciones. FechaFin puede ser nulo
        if(nombre == null || nombre.equals("") || fechaInicio == null){
            System.out.println("Error. Algún campo nulo o vacío.");
            return false;
        }
        else{
            formateaFechas(fechaInicio);
            formateaFechas(fechaFin);
        }
        
        if(fechaFin != null && fechaInicio.after(fechaFin)){
            System.out.println("Error. La fecha de inicio es posterior a la de fin.");
            return false;
        }
        
	/* Compara con la fecha actual menos un minuto dado a que, cuando se importa desde un fichero
	 * sin especificar la fecha inicial, este coge la actual, y siempre sería unos segundos anterior 
	 */ 
        
	java.util.Date actual = new java.util.Date();
        //System.out.println(actual + " " + fechaInicio);
	actual.setTime( actual.getTime() - 1000 * 60 );
        //System.out.println(actual + " " + fechaInicio);
        if(fechaInicio.before(actual)){
            System.out.println("Error. La fecha de inicio es anterior a la actual.");
            return false;
        }
      
        TareaBean t = new TareaBean();
        t.setNombre(nombre);
        t.setFechaInicio(fechaInicio);
        t.setFechaFinal(fechaFin);
        
        return AccesoBBDD.anhadirTarea(t, idProyecto);
    }
    
    @Override
    public boolean borrarTarea(String nombre){
        if(nombre == null || nombre.equals("")){
            System.out.println("Error. Nombre vacío.");
            return false;
        }
        
        return AccesoBBDD.borrarTarea(nombre);
    }
    
    @Override
    public boolean modificarTarea(int id, String nombre, Date fechaInicio, Date fechaFin){
        // Comprobaciones
        
        if(nombre == null || nombre.equals("") || fechaInicio == null || fechaFin == null){
            System.out.println("Error. Algún campo nulo o vacío.");
            return false;
        }
        else{
            formateaFechas(fechaInicio);
            formateaFechas(fechaFin);
        }
        
        if(fechaInicio.after(fechaFin)){
            System.out.println("Error. La fecha de inicio es posterior a la de fin.");
            return false;
        }
        
        if(fechaInicio.before(new java.util.Date() )){
            System.out.println("Error. La fecha de inicio es anterior a la actual.");
            return false;
        }
        
        return AccesoBBDD.modificarTarea(id, nombre, fechaInicio, fechaFin);
    }
    
    @Override
    public boolean anhadirProyecto(String nombre, Date fechaInicio, Date fechaFin){
        // Comprobaciones
        if(nombre == null || nombre.equals("") || fechaInicio == null){
            System.out.println("Error. Algún campo nulo o vacío.");
            return false;
        }
        else{
            formateaFechas(fechaInicio);
            formateaFechas(fechaFin);
        }
        
        if(fechaFin != null && fechaInicio.after(fechaFin)){
            System.out.println("Error. La fecha de inicio es posterior a la de fin.");
            return false;
        }
        
	/* Compara con la fecha actual menos un minuto dado a que, cuando se importa desde un fichero
	 * sin especificar la fecha inicial, este coge la actual, y siempre sería unos segundos anterior 
	 */ 
	java.util.Date actual = new java.util.Date();
	actual.setTime( actual.getTime() - 1000 * 60 );
        if(fechaInicio.before(actual)){
            System.out.println("Error. La fecha de inicio es anterior a la actual.");
            return false;
        }
        
        ProyectoBean p = new ProyectoBean();
        p.setNombre(nombre);
        p.setFechaInicio(fechaInicio);
        p.setFechaFinal(fechaFin);
        
        return AccesoBBDD.anhadirProyecto(p);
    }
    
    @Override
    public boolean eliminarProyecto(String nombre){
        if(nombre == null || nombre.equals("")){
            System.out.println("Error. Nombre vacío.");
            return false;
        }
                
        return AccesoBBDD.eliminarProyecto(nombre);
    }
    
    @Override
    public boolean modificarProyecto(int id, String nombre, Date fechaInicio, Date fechaFin){
        // Comprobaciones
        if(nombre == null || nombre.equals("") || fechaInicio == null || fechaFin == null){
            System.out.println("Error. Algún campo nulo o vacío.");
            return false;
        }
        else{
            formateaFechas(fechaInicio);
            formateaFechas(fechaFin);
        }
        if(fechaInicio.after(fechaFin)){
            System.out.println("Error. La fecha de inicio es posterior a la de fin.");
            return false;
        }
        
        if(fechaInicio.before(new java.util.Date() )){
            System.out.println("Error. La fecha de inicio es anterior a la actual.");
            return false;
        }
        
        return AccesoBBDD.modificarProyecto(id, nombre, fechaInicio, fechaFin);
    }
    
    @Override
    public boolean asignarTareaProyecto(String nombreTarea, String nombreProyecto){
        if(nombreTarea == null || nombreTarea.equals("") || nombreProyecto == null || nombreProyecto.equals("")){
            System.out.println("Error. Algún nombre vacío.");
            return false;
        }
                
        return AccesoBBDD.asignarTareaProyecto(nombreTarea, nombreProyecto);
    }
    
    @Override
    public boolean desasignarTareaProyecto(String nombreTarea){
        if(nombreTarea == null || nombreTarea.equals("")){
            System.out.println("Error. Algún nombre vacío.");
            return false;
        }
                
        return AccesoBBDD.desasignarTareaProyecto(nombreTarea);
    }
    
    @Override
    public List<TareaBean> getListaTareas(){
        return AccesoBBDD.obtenerTareas();
    }
    
    @Override
    public TareaBean getTarea(String nombre){
        if(nombre == null || nombre.equals("")){
            System.out.println("Error. Nombre vacío.");
            return null;
        }
                
        return AccesoBBDD.obtenerTarea(nombre);
    }
    
    @Override
    public List<ProyectoBean> getListaProyectos(){
        return AccesoBBDD.obtenerProyectos();
    }
    
    @Override
    public ProyectoBean getProyecto(String nombre){
        if(nombre == null || nombre.equals("")){
            System.out.println("Error. Nombre vacío.");
            return null;
        }
                
        return AccesoBBDD.obtenerProyecto(nombre);
    }
    
    @Override
    public List<TareaBean> filtrarTareas(String filtro, Object valor){
        // Comprobaciones
        if(filtro == null || filtro.equals("") || valor == null){
            System.out.println("Error. Algún campo nulo o vacío.");
            return null;
        }
        
        return AccesoBBDD.filtrarTareas(filtro, valor);
    }
    
    @Override
    public List<ProyectoBean> filtrarProyectos(String filtro, Object valor){
        // Comprobaciones
        if(filtro == null || filtro.equals("") || valor == null){
            System.out.println("Error. Algún campo nulo o vacío.");
            return null;
        }
        
        return AccesoBBDD.filtrarProyectos(filtro, valor);
    }

    @Override
    public boolean anhadirTarea(String nombre, Date fechaInicio, Date fechaFin) {
        // Comprobaciones. FechaFin puede ser nulo
        if(nombre == null || nombre.equals("") || fechaInicio == null){
            System.out.println("Error. Algún campo nulo o vacío.");
            return false;
        }
        else{
            formateaFechas(fechaInicio);
            formateaFechas(fechaFin);
        }
        
        if(fechaFin != null && fechaInicio.after(fechaFin)){
            System.out.println("Error. La fecha de inicio es posterior a la de fin.");
            return false;
        }
        
	/* Compara con la fecha actual menos un minuto dado a que, cuando se importa desde un fichero
	 * sin especificar la fecha inicial, este coge la actual, y siempre sería unos segundos anterior 
	 */ 
        
	java.util.Date actual = new java.util.Date();
       // System.out.println(actual + " " + fechaInicio);
	actual.setTime( actual.getTime() - 1000 * 60 );
       // System.out.println(actual + " " + fechaInicio);
        if(fechaInicio.before(actual)){
            System.out.println("Error. La fecha de inicio es anterior a la actual.");
            return false;
        }
      
        TareaBean t = new TareaBean();
        t.setNombre(nombre);
        t.setFechaInicio(fechaInicio);
        t.setFechaFinal(fechaFin);
        
        return AccesoBBDD.anhadirTarea(t, 0);
    }
}
